Laravel8 ビューの雛形の中に雛形(?)をいれたい(Blade Components)
作成日:2023-01-05, 更新日:2023-07-03
私の環境
WIN+Docker+Ubuntuでlaravelを使うための作業メモ
やりたいこと
下記の流れより新たに追加作業
現状
まず、ざっくりと下記のような感じのソースがすでにある
▼コントローラが呼び出すビュー
<x-common-layout ~ 省略 ~"> <h1>xxxx</h1> ~ 省略 ~ </x-common-layout>
▼ビューが呼び出す雛形(resources/views/components/common-layout.blade.php)
<html> ~ 省略 ~ <body> {{ $slot }} </body> </html>
希望
任意のページにナビゲーションメニューを追加したい
▼コントローラが呼び出すビュー
<x-common-layout ~ 省略 ~"> <x-ヘッダーナビ ~ 省略 ~"></x-ヘッダーナビ> ← ナビゲーションメニューを追加したい <h1>xxxx</h1> ~ 省略 ~ </x-common-layout>
作業
希望は『ビューから「admin/header-navi」を追加』。流れは下記(※以前と同じ感じ)
- artisanコマンドでファイル作成
- 「app/View/Components」の編集
- 「resources/views/components」の編集
- ビューの編集
- 確認
artisanコマンドでファイル作成
▼「admin/header-navi」が欲しいので「Admin/HeaderNavi」とする(※「Admin」と「admin」…大文字・小文字のどっちから始めるのが良いんだろう?)
$ ./vendor/bin/sail php artisan make:component Admin/HeaderNavi
→「app/View/Components/Admin/HeaderNavi.php」「resources/views/components/admin/header-navi.blade.php」が作られる
「app/View/Components」の編集
ビューからHeaderNaviに渡したい引数の設定
▼「app/View/Components/Admin/HeaderNavi.php」
~ 省略 ~ class HeaderNavi extends Component { public $headerNavi; // ビューから雛形に渡す変数の設定 /** * Create a new component instance. * * @return void */ public function __construct($headerNavi) { $this->headerNavi = $headerNavi; } ~ 省略 ~
※「headerNavi」を「header_navi」とかにすると後が面倒なんで「_」は使わないようにする
「resources/views/components」の編集
とりあえず渡ってきた変数を出力しておく
▼「resources/views/components/admin/header-navi.blade.php」
<?php var_dump($headerNavi); ?>
ビューの編集
▼既存のビューに追加(「x-admin.header-navi」のトコが追加分)
<x-common-layout ~ 省略 ~"> <x-admin.header-navi :headerNavi="$headerNavi"></x-admin.header-navi> <h1>xxxx</h1> ~ 省略 ~ </x-common-layout>
※「admin/header-navi」なんで「x-admin.header-navi」となる
確認
ブラウザで表示されればOK
エラー対応
困ったときは「キャッシュのクリア」と「composerファイルの更新」を行う
▼キャッシュのクリア
./vendor/bin/sail artisan view:clear
▼composerファイルの更新
composer dump-autoload
「admin」と「Admin」
- artisanコマンドで小文字で始まる「admin」を作成後、削除
- 次に大文字で始まる「Admin」で作成
- ブラウザで確認したらエラー
「admin」でcomposerファイルが作成されたので「Admin」で作り直す必要があるとのこと
「_」を使った「header_navi」
▼ブラウザで確認したら出てきたエラー
Unresolvable dependency resolving [Parameter #0 [~~~~ ]] in class App\View\Components\xxxx(View: xxx.blade.php)
原因は「_」。対象箇所から「_」を削除して対応